package com.example.controller;


import com.example.entity.RestBean;
import com.example.entity.vo.response.NotificationVO;
import com.example.service.NotificationService;
import com.example.utils.Const;
import jakarta.annotation.Resource;
import jakarta.validation.constraints.Min;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author xusen
 * @since 2025-05-04
 */
/**
 * 通知控制器类，处理与用户通知相关的HTTP请求
 */
@RestController
@RequestMapping("/api/notification")
public class NotificationController {

    /**
     * 注入通知服务类，用于执行通知相关的业务逻辑
     */
    @Resource
    NotificationService service;

    /**
     * 获取用户通知列表
     *
     * @param id 用户ID，用于查询该用户的通知
     * @return 包含用户通知列表的RestBean对象
     */
    @GetMapping("/list")
    public RestBean<List<NotificationVO>> listNotification(@RequestAttribute(Const.ATTR_USER_ID) int id) {
        return RestBean.success(service.findUserNotification(id));
    }

    /**
     * 删除特定的通知
     *
     * @param id 通知ID，用于指定要删除的通知
     * @param uid 用户ID，确保只有用户本人可以删除通知
     * @return 表示操作结果的RestBean对象
     */
    @GetMapping("/delete")
    public RestBean<List<NotificationVO>> deleteNotification(@RequestParam @Min(0) int id,
                                                             @RequestAttribute(Const.ATTR_USER_ID) int uid) {
        service.deleteUserNotification(id, uid);
        return RestBean.success();
    }

    /**
     * 删除用户的所有通知
     *
     * @param uid 用户ID，用于指定要删除所有通知的用户
     * @return 表示操作结果的RestBean对象
     */
    @GetMapping("/delete-all")
    public RestBean<List<NotificationVO>> deleteAllNotification(@RequestAttribute(Const.ATTR_USER_ID) int uid) {
        service.deleteUserAllNotification(uid);
        return RestBean.success();
    }
}
